﻿using Model.Entities;
using Model.Gateways;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Controller
{
    public class HorariosController
    {
        private CidadesGateway CidadesGtw;
        private HorariosGateway HorariosGtw;
        private IHorariosView View;

        public HorariosController(IHorariosView view)
        {
            this.View = view;
            this.CidadesGtw = new CidadesGateway();
            this.HorariosGtw = new HorariosGateway();
        }

        public void LoadView()
        {
            this.LoadCidadesOrigem();
            this.LoadCidadesDestino();
        }

        private void LoadCidadesOrigem()
        {
            this.View.ClearCidadesOrigem();
            IList<Cidades> cidades = this.CidadesGtw.fetchAll();
            foreach (Cidades item in cidades)
            {
                this.View.AddCidadeOrigem(item);
            }
            this.View.SelectFirstCidadeOrigem();
        }

        public void LoadEstacoesOrigem(Cidades cidade)
        {
            this.View.ClearEstacoesOrigem();
            IList<Estacoes> estacoes = cidade.Estacoes;
            foreach (Estacoes item in estacoes)
            {
                this.View.AddEstacaoOrigem(item);
            }
            this.View.SelectFirstEstacaoOrigem();
        }

        private void LoadCidadesDestino()
        {
            this.View.ClearCidadesDestino();
            IList<Cidades> cidades = this.CidadesGtw.fetchAll();
            foreach (Cidades item in cidades)
            {
                this.View.AddCidadeDestino(item);
            }
            this.View.SelectFirstCidadeDestino();
        }

        public void LoadEstacoesDestino(Cidades cidade)
        {
            this.View.ClearEstacoesDestino();
            IList<Estacoes> estacoes = cidade.Estacoes;
            foreach (Estacoes item in estacoes)
            {
                this.View.AddEstacaoDestino(item);
            }
            this.View.SelectFirstEstacaoDestino();
        }

        public long LoadHorarios(Estacoes estacao_origem, Estacoes estacao_destino, int dia_da_semana)
        {
            long c = 0;

            this.View.ClearHorarios();
            IList<String> columns = new List<String>();
            columns.Add("Código");
            columns.Add("Cidade de Origem");
            columns.Add("Estação de Origem");
            columns.Add("Cidade de Destino");
            columns.Add("Estação de Destino");
            columns.Add("Horário");
            columns.Add("Dia da Semana");
            columns.Add("Terminal");
            this.View.AddHorariosColumns(columns);

            IList<object[]> horarios = this.HorariosGtw.fetchObjByFilter(estacao_origem, estacao_destino, dia_da_semana);
            foreach (object[] item in horarios)
            {
                this.View.AddHorarioRow(item);
                c++;
            }

            return c;
        }
    }
}
